CPU Scheduling
OS์ ๋ฉํฐ ํ๋ก๊ทธ๋๋ฐ์ ๊ธฐ์ด๊ฐ ๋๋ ๊ฐ๋
[!๋ฉํฐ ํ๋ก๊ทธ๋๋ฐ์ ๋ชฉ์ ์ฑ] > CPU์ ์๋๊ฐ ๋๋ฌด ๋น ๋ฅด๊ธฐ์ ์ ํด์๊ฐ์ด ํฌ๋ค. ์ด๋ฅผ Interliving์ ์ด์ฉํ ์๋ถํ ์ ํตํด์ CPU ์ฌ์ฉ๋์ ๋์ด๊ธฐ ์ํด์ ์ฌ์ฉํ๋ค.
Multi Thread์ Multi Process๋ ์์ฐํ ๋ค๋ฅธ ๊ฐ๋ ์ด์ง๋ง ์๋์๋ฆฌ๋ ๋น์ทํ๊ธฐ์ ํด๋น ์ฑํฐ์์๋ ์ด๋ฅผ Multi Processing์ ๋ํด์ ์ค๋ช ํ๋ค.
5.1 ๊ธฐ๋ณธ ๊ฐ๋
CPU์ ์ฒ๋ฆฌ์๋๋ ์ปดํจํฐ๊ฐ ๋ฐ์ ํ ์๋ก ๋นจ๋ผ์ก๊ณ ์ด๋ ํ๋ก์ธ์ค๋ฅผ ๋นจ๋ฆฌ์ฒ๋ฆฌํ๊ฒ ๋๋๋ฐ์ ์ง๊ฒฐ๋๋ฉด์ CPU์ ํ์ฉ์ 100%๋ก ํ์ฉํ์ง ๋ชปํ๊ณ CPU์ ์ ํด์๊ฐ(Idle Time)์ ์ฆ๊ฐ์ํค๊ฒ๋ ๊ฒ๊ธฐ๊ฐ ๋๋ค.
์ ๊ทธ๋ฆผ์ Cpu Burst ์๊ฐ๊ณผ I/O Busrt์ ์๊ฐ๋ค(CPU-I/O Burst Cycle)์ ์ผ๋ จ์ ๊ณผ์ ์ผ๋ก ํํํ ๊ณผ์ ์ผ๋ก ๊ฐ Burst๋ ๋ค์ ์๋ฏธ๋ฅผ ๊ฐ์ง๋ค..
- I/O Burst : I/O ์ฅ์น์ ์๋์ ๊ธฐ๋ค๋ฆฌ๋ ์์ ์ผ๋ก Wating Queue์์ Ready Queue๋ก ์ด๋ํ๊ฒ ๋๋ ๊ณผ์ ์ด๋ค.
- CPU Burst : CPU๊ฐ ํ๋ก์ธ์ค๋ฅผ ์ฒ๋ฆฌํ๋ ๊ณผ์ ์ผ๋ก Waiting Queue์์ Running Queue๋ก ๋์ด๊ฐ๊ฒ ๋๋ ๊ณผ์ ์ด๋ค.
CPU Core๊ฐ ํ๋ ์๋ ์ํฉ์์ ํ๋์ ์์ (Process)๊ฐ ๋๋๋ฉด ์ถ๋ ฅ์ด ๋๊ณ ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ ์ ๋ ฅ์ผ๋ก ๋๋ ๊ณผ์ ์ ๋ํ๋ธ ๊ฒ์ด๋ค.
CPU ์ฒ๋ฆฌ ๊ณผ์
์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ์ฌ๋ฌ ํ๋ก์ธ์ค๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ๋์์ ๋ก๋๋์ง๋ง CPU๋ฅผ ์ ์ ํ ํ๋ก์ธ์ค๊ฐ ์คํ์ด ๋๋ค. ์ดํ ์คํ์ด ์๋ฃ๋๋ฉด ๋ค์ ํ๋ก์ธ์ค๊ฐ CPU๋ฅผ ์ ์ ํ๊ณ ๋ค๋ฅธ ํ๋ก์ธ์ค๋ ready์ํ์์ ๋๊ธฐํ๋ค.

- P1 : CPU์์ ์คํ
- P2, P3 : ready Queue์์ ๋๊ธฐ
- ์ฌ๊ธฐ์ ํน์ ์์์ ๊ธฐ๋ค๋ฆฐ๋ค๋ฉด Waiting Queue์์ ๋๊ธฐ
NOTE
> Content์ฌ๊ธฐ์ Waiting Queue์์ ๋๊ธฐํ๋ ๊ณผ์ ์ ๋ฉ๋ชจ๋ฆฌ์ ์กด์ฌํ๋ ๊ฒ์ธ๊ฐ? ์๋๊ฐ?
๊ฒฐ๊ตญ CPU์ ์ฒ๋ฆฌ์๋๊ฐ ๋นจ๋ผ์ง๋ฉด์ CPU๋ฅผ 100% ํ์ฉํ์ง ๋ชปํ๊ฒ ๋์๊ธฐ์ ์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด์ CPU Scheduling์ ๊ฐ๋ ์ด ๋์ ๋๋ค.
Preemptive vs Non-preemptive
์ ์ ํ ์ปค๋, ๋น์ ์ ํ ์ปค๋๋ก๋ ๋ถ๋ฆฐ๋ค. ์ฌ๊ธฐ์์ ์ ์ ํ์ ์ง๊ธ ํ์ฑํ๋, CPU๋ฅผ ์ฌ์ฉ์ค์ธ ํ๋ก์ธ์ค๋ฅผ ์ซ์๋ธ๋ค ๋ผ๊ณ ์๊ฐํด๋ ๋๋ค.
Non-Preemptive (๋น์ ์ ํ ์ปค๋)
CPU๋ฅผ ์ฌ์ฉ์ค์ธ ํ๋ก์ธ์ค๊ฐ ์๋ค๋ฉด ํด๋นํ๋ ํ๋ก์ธ์ค๊ฐ ์ข ๋ฃ๋ ๋ ๊น์ง ๊ธฐ๋ค๋ฆฐ๋ค. ์ฌ๊ธฐ์์ ์ข ๋ฃ๋ ์คํ์๋ฃ ๋๋ wating ์ํ๋ก ์ ํ๋๋ ๊ฒฐ๊ณผ ๋ ์ค ํ๋์ด๋ค.
Preemptive (์ ์ ํ ์ปค๋)
CPU Scheduler๊ฐ ์ฐ์ ์์๊ฐ ๋ ๋์ ํ๋ก์ธ์ค์ ์ฒ๋ฆฌ๋ฅผ ์ํด ํ์ฌ ์งํํ๊ณ ์๋ ํ๋ก์ธ์ค๋ฅผ ๋ด์ซ๋ ์ฆ, ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ CPU๋ฅผ ์ ์ ํ๋ ๋ฐฉ์์ด๋ค.
CPU Scheduling ๊ณผ์ ์์ ํ๋จ์ด ์ผ์ด๋๋ ์ข ๋ฅ

- Running โ Waiting : I/O ์์ฒญ์ด๋ ์์ ํ๋ก์ธ์ค ์ข
๋ฃ๋ฅผ ๊ธฐ๋ค๋ฆฌ๊ธฐ ์ํด
wait()ํธ์ถ ์ ์คํ๋๋ค. ํ๋ก์ธ์ค๊ฐ I/O ์์ฒญ์ด๋ ์์ ํ๋ก์ธ์ค ์ข ๋ฃ๋ฅผ ๊ธฐ๋ค๋ฆฌ๊ธฐ ์ํด ๋๊ธฐ ์ํ๋ก ์ ํ๋๋ ๊ฒฝ์ฐ์ด๊ธฐ์ CPU๋ฅผ ์ฌ์ฉํ์ง ์๋ ๊ณผ์ ์ผ๋ก ๋์ด๊ฐ๊ธฐ์ ์์ฐ์ค๋ฝ๊ฒ CPU๋ ๋ค๋ฅธ ํ๋ก์ธ์ค๋ฅผ ์ฌ์ฉํ๋ค. ๊ทธ๋ ๊ธฐ์ Scheduling Decision์ด ํ์์๋ Non-preemptive ๊ณผ์ ์ด๋ค. - Running โ Ready : ์ธํฐ๋ฝํธ๊ฐ ๋ฐ์ํ์ฌ ์คํ ์ค์ธ ํ๋ก์ธ์ค๋ฅผ ์ค๋จํ๊ณ ์ค๋น ์ํ๋ก ์ ํ๋ ๋๋ CPU ์ค์ผ์ค๋ฌ๊ฐ ๋ค๋ฅธ ํ๋ก์ธ์ค๋ฅผ ์ ํํด์ผ ํ๋ค. ์ด๋ Preemptive ๋๋ Non-preemptive ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋ค.
- Waiting โ Ready : I/O ์์ ์ด ์๋ฃ๋์ด ํ๋ก์ธ์ค๊ฐ ๋ค์ ์คํ ์ค๋น๊ฐ ๋์์ ๊ฒฝ์ฐ๋ก Waiting ์ํ์์ Reday ์ํ๋ก ์ ํ๋ ํ๋ก์ธ์ค๋ Ready ํ์ ์ถ๊ฐ๋ฉ๋๋ค. ์ฌ๊ธฐ์ CPU ์ค์ผ์ค๋ฌ๋ ์ฐ์ ์์๋ฅผ ํ๊ฐํ์ฌ Preemptive ๋๋ Non-preemptive ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋ค.
- Running โ Terminate : ์คํ ์ค์ธ ํ๋ก์ธ์ค๊ฐ ์์ ์ ์๋ฃํ๊ณ ์ข ๋ฃ๋ ๊ฒฝ์ฐ์ด๋ค. ์ด ๋, CPU๋ ์ค๋น ํ์์ ๋ค์ ํ๋ก์ธ์ค๋ฅผ ์ ํํ๊ธฐ์ Scheduling Decision์ด ํ์ ์๋ Non-preemptive ๊ณผ์ ์ด๋ค.
Dispatcher
CPU ์ค์ผ์ค๋ง์ ์ค์ํ ๊ตฌ์ฑ ์์๋ก, CPU ์ค์ผ์ค๋ฌ๊ฐ ์ ํํ ํ๋ก์ธ์ค๋ฅผ ์ค์ ๋ก CPU์์ ์คํํ ์ ์๋๋ก ์ ์ด๊ถ์ ๋๊ธฐ๋ ์ญํ ์ ์ํํ๋ ํ๋์ ๋ชจ๋์ด๋ค.
์ฆ, Context Switch๋ฅผ ํด์ฃผ๋ ๋ชจ๋
Dispatcher ๊ธฐ๋ฅ
- Context Switching : ์ด์ ํ๋ก์ธ์ค์ ์ํ(๋ ์ง์คํฐ, ํ๋ก๊ทธ๋จ ์นด์ดํฐ ๋ฑ)๋ฅผ ์ ์ฅํ๊ณ , ์๋ก ์ ํ๋ ํ๋ก์ธ์ค์ ์ํ๋ฅผ ๋ณต์ ์ํ
- User Mode Switching : CPU๋ฅผ ์ปค๋ ๋ชจ๋์์ ์ฌ์ฉ์ ๋ชจ๋๋ก ์ ํํ์ฌ ์ ํ๋ก์ธ์ค๋ฅผ ์คํํ ์ ์๋๋ก ์ค์
- ํ๋ก๊ทธ๋จ ์คํ ์ฌ๊ฐ :CPU๋ฅผ ์ ํ๋ก์ธ์ค์ ์ฝ๋๊ฐ ์ ์ฅ๋ ๋ฉ๋ชจ๋ฆฌ ์์น๋ก ์ด๋์์ผ ์คํ์ ์์ํฉ๋๋ค. ์ฆ, ์ค๋จ๋ ํ๋ก๊ทธ๋จ์ด ์๋ค๋ฉด ํด๋น ํ๋ก๊ทธ๋จ์ ์ ์ ํ ์์น๋ก ์ด๋ํ๋ ๊ฒ
Scheduler
> - Scheduler : ์ด๋ค Process๋ฅผ ์ฒ๋ฆฌํ ์ง ์ ํํ๋ ๊ฒ
> - Dispatcher : ์ค์ Switch ๊ณผ์ ์ ์ํ
์ฌ๊ธฐ์ Dispatcher๋ ๊ฐ๋ฅํ ๋นจ๋ผ์ผํ๋ค!
Contexxt Switch๋ง๋ค ์ฌ์ฉ๋๋ Dispatcher๋ ๋ค๋ฅธ ํ๋ก์ธ์ค์ Stop ์ํ์ ๋ค๋ฅธ ํ๋ก์ธ์ค์ Start ์ฌ์ด์ Dispatch Latency๊ฐ ๋ฐ์ํ๋ค.
ํ์ CPU๋ฅผ 100%๋ฅผ ์ฐ๋ ์ํฉ์ด ์จ๋ค๋ฉด Dispatch๋ฅผ ์ํํ๋ค๊ฐ 100%๋ฅผ ์ฐ๋๋ค. ๊ทธ๋ ๊ธฐ์ Dispatcher Latency๋ CPU ์ฌ์ฉ์๊ฐ๋ณด๋ค ์งง์์ง๋๋ก ํด์ผํ๋ค.

5.2 Scheduling Criteria
CPU ์ค์ผ์ค๋ง์ ๋ํ ์๊ณ ๋ฆฌ์ฆ์ ์์ฒญ ๋ค์ํ๊ฒ ์กด์ฌํ๊ณ ํน์ ์ํฉ์ ์ ๋ฆฌํ ์๊ณ ๋ฆฌ์ฆ๋ค์ด ์กด์ฌํ๋ค. ์ด๋ฌํ ์๊ณ ๋ฆฌ์ฆ๋ค์ ์ ํํ ๋์ ๋ค์ ๊ธฐ์ค๋ค์ ๊ณ ๋ คํด์ผํ๋ค.
- CPU Utillization : ์ต๋ํ CPU๋ฅผ ํ์ฉํ๋๋ก ์ฒ๋ฆฌํด์ผํ๋ค.
- Throughput : ๋จ์์๊ฐ ๋ด์ Process์ ์ฒ๋ฆฌ๋
- Turnaround Time : ํ๋ก์ธ์ค๊ฐ CPU์ ๋๋ฌ(์คํ ์ค๋น ์ํ)ํ ์๊ฐ๋ถํฐ ์ข ๋ฃ๋๋ ์๊ฐ
- Waiting Time : Process๊ฐ Ready Queue์์ ๋๊ธฐํ๋ ์๊ฐ์ผ๋ก CPU๋ฅผ ํ ๋น๋ฐ์ ๋๊น์ง ๋๊ธฐํ๋ ์๊ฐ์ด๋ค.
- Response Time : ๋ฐ์๊น์ง ์ค๋ ์๊ฐ์ผ๋ก ์ฃผ๋ก Interactive ์์คํ (e.g. ๊ฒ์)์์ ์ฌ์ฉ๋๋ค. UX์ ์ธ ์์์ ์ง์คํ ๋ถ๋ถ์ผ๋ก ๋ณผ ์ ์๋ค.
5.3 Scheduling Algorithms
CPU ์ค์ผ์ค๋ง์์๋ Ready Queue์ ์กด์ฌํ๋ ํ๋ก์ธ์ค ์ค ์ด๋ค ํ๋ก์ธ์ค๋ฅผ CPU์ ํ ๋นํ ๊ฒ์ด๋์ ๋ํ ๊ณผ์ ์ด ๋งค์ฐ ์ค์ํ๋ค. ํด๋นํ๋ ๋ก์ง, ์๊ณ ๋ฆฌ์ฆ์ ํตํด ์์ ๊ธฐ์ค๋ค์ ์๊ฑด์ ๋ง์ถ๋ฉฐ ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
๋ค์ํ ์๊ณ ๋ฆฌ์ฆ์ ๋ค์๊ณผ ๊ฐ์ด ์กด์ฌํ๋ค.
FCFS Scheduling
First-Come, First-Served๋ก ๋จผ์ ๋ค์ด์จ ํ๋ก์ธ์ค๋ฅผ ๋จผ์ ์ฒ๋ฆฌํ๋ ๊ฒ์ด๋ค. ์ด๋ ๊ฐ์ฅ ๋จ์ํ ์๊ณ ๋ฆฌ์ฆ์ ํํ๋ก FIFO Queue๋ฅผ ํตํด ๊ฐ๋จํ๊ฒ ๊ตฌํํ ์ ์๋ค.

์ ๋ฌธ์ ๋ ๋ค์์ ์กฐ๊ฑด์ ๊ฐ์ง๋ค.
- ๋ชจ๋ ํ๋ก์ธ์ค๋ ๋์ผ ์๊ฐ(0 ์๊ฐ)์ ๋์ฐฉํ๋ค.
- CPU Burst Time์ ๋ฐ๋ฆฌ์ธ์ปจ ๋จ์๋ก ์ ๊ทธ๋ฆผ์ฒ๋ผ ํ๋ก์ธ์ค ๋ง๋ค ์ฒ๋ฆฌํด์ผํ๋ ์๊ฐ์ด ์ฃผ์ด์ ธ ์๋ค.
- ๋์ผ ์๊ฐ์ ๋์ฐฉํ์์ง๋ง Queue์๋ P1, P2, P3์ ์์ธ๋ค. (์ด๋ ns์ ๊ฐ์ ๋งค์ฐ ์์ ์ค์ฐจ์ด๊ธฐ์ ์ค๋ช ์ ์ํด์๋ ๋ฌด์๋๊ณ ์ค์ ๊ตฌํ์์๋ ๋ฌด์๋๋๋ก ์ฒ๋ฆฌ๋๊ธฐ๋ ํ๋ค.)
CPU๊ฐ ์ฒ๋ฆฌํ๋ ๊ณผ์ ์ Gantt Chart๋ก ํํํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
์ฒ๋ฆฌ๊ณผ์ ์ ๋ค์๊ณผ ๊ฐ๋ค.
- P1์ด ๋จผ์ ๋ค์ด์๊ธฐ์ FCFS ์์น์ ์ํด P1์ ์ฒ๋ฆฌ
- P1์ ์ฒ๋ฆฌ ํ ๊ทธ ๋ค์ ์์์ธ P2 ์ฒ๋ฆฌ
- P2๊ฐ Terminate๋ ํ P3๋ฅผ Running State๋ก ๋ณํ ๋ฐ CPU๊ฐ ์ฒ๋ฆฌ
- P3์ Ternimate ์ํ ๋ณํ ํ ์ฒ๋ฆฌ ์ข ๋ฃ
์ ๊ณผ์ ์์ Waiting Time์ ๊ณ์ฐํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
- P1 = 0, P2 = 24, P3 = 27
- Total Waiting Time : 0 + 24 + 27 = 51
- Average Waiting Time : 53/3 = 17
์ฌ๊ธฐ์ ์ฐ๋ฆฌ๋ Average Waiting Time์ ์ง์คํ์ฌ ์ด๋ฅผ ์ต์ํํ๋ ๋ฐฉํฅ์ผ๋ก ์๊ณ ๋ฆฌ์ฆ์ ์ฒ๋ฆฌํด์ผํ๋ค.
Turnaround Time ๊ณ์ฐ
- P1 = 24, P2 = 27, P3 = 30
- Total Turnaround Time : 24 + 27 + 30 = 81
- Average Turnaround Time : 81/3 = 27
๋ ๋ค๋ฅธ ์ํฉ์ผ๋ก P2, P3, P1 ์์๋ก Ready Queue์ ์์๋ค๊ณ ๋ณด์.
CPU๊ฐ ์ฒ๋ฆฌํ๋ ๊ณผ์ ์ ๋ค์๊ณผ ๊ฐ๋ค.

- P2๊ฐ ๋จผ์ ๋ค์ด์๊ธฐ์ FCFS ์์น์ ์ํด P2๋ฅผ ์ฒ๋ฆฌ
- P2์ ์ฒ๋ฆฌ ํ ๊ทธ ๋ค์ ์์์ธ P3 ์ฒ๋ฆฌ
- P3๊ฐ Terminate๋ ํ P1์ Running State๋ก ๋ณํ ๋ฐ CPU๊ฐ ์ฒ๋ฆฌ
- P1๊ฐ Terminate ์ํ๋ก ๋ณํ๋ ํ ์ฒ๋ฆฌ ์ข ๋ฃ
์ ๊ณผ์ ์์ Waiting Time์ ๊ฒ์ฐํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
- P1 = 6, P2 = 0, P3 = 3
- Total Waiting Time : 6 + 0 + 3 = 9
- Average Waiting Time : 9/3 = 3
Turnaround Time ๊ณ์ฐ
- P1 = 30, P2 = 3, P3 = 6
- Toal Turnaround Time : 30 + 3 + 6 = 39
- Average Turnaround Time : 39 / 3 = 13
์ ๋ฆฌ
FCFS ์ค์ผ์ค๋ง์ ๋ฐ๋ฅด๋ฉด Average Waiting Time์ด ์ต์ ์ด ๋ ์ ์๋ค. ํ๋ก์ธ์ค์ CPU-burst time์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๊ธฐ ๋๋ฌธ์ด๋ค. ๋ํ, FCFS ์ค์ผ์ค๋ง์ ์งํ์ค์ธ ํ๋ก์ธ์ค๊ฐ ์๋ฃ๋ ํ์ ๋ค์ ํ๋ก์ธ์ค๊ฐ ์งํ๋๊ธฐ์ Non-Preemptive์ด๋ค.
Convoy
> Content
Shortest-Job-First Scheduling
ํด๋น ํ๋ ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ์ฅ CPU burst ์๊ฐ์ด ์งง์ ํ๋ก์ธ์ค๋ฅผ ๋ค์ ์์๋ก ํ ๋นํ๋ ๊ฒ์ด๋ค. ๊ทธ๋ ๊ธฐ์ shortest-next-CPU-burst-first-scheduling์ด๋ผ๊ณ ๋ถ๋ฆฌ๊ธฐ๋ ํ๋ค.
ํ๋ก์ธ์ค์ CPU Burst ์๊ฐใ ๋ ๋์ผํ๋ฉด FCFS์ ๋์ผํ ๋์์ด๋ค.

์ ๊ทธ๋ฆผ์ ํ๋ก์ธ์ค๊ฐ ์กด์ฌํ๋ค๊ณ ํ ๋, SJF๋ ๋ค์๊ณผ ๊ฐ์ด ์ฒ๋ฆฌ๋๋ค.

- CPU Burst ์๊ฐ์ด ๊ฐ์ฅ ์ ์ P4๊ฐ ๋จผ์ ์ฒ๋ฆฌ๋๋ค.
- CPU Burst ์๊ฐ์ด ๊ทธ ๋ค์์ ์ ์ P1์ด ์ฒ๋ฆฌ๋๋ค.
- P3๊ฐ ์ฒ๋ฆฌ๋๋ค.
- P2๊ฐ ์ฒ๋ฆฌ๋ ํ ์ข ๋ฃ๋๋ค.
Waiting Time
- P1 = 3, P2 = 16, P3 = 9, P4 = 0
- Total Waiting Time : 3 + 16 + 9 + 0 = 28
- Average Waiting Time : 28/4 = 7
Turnaround time:
- P1 = 9, P2 = 24, P3 = 16, P4 = 3
- Total Turnaround Time : 9 + 24 + 16 + 3 = 52
- Average Turnaround Time : 52/4 = 13
SJF์ ์คํ๊ฐ๋ฅ์ฑ
SJF๋ ์ด๋ก ์ ๋๊ธฐ ์๊ฐ์ ์ต์ํํ๋ ์ต์ ์ ์๊ณ ๋ฆฌ์ฆ์ด๋ค. ๊ทธ๋ ์ง๋ง, ํ๋ก์ธ์ค์ CPU burst Time์ ์ ๋ฐฉ๋ฒ์ ์๋ค. ๊ทธ๋ ๊ธฐ์ ๊ทผ์ฌํํ์ฌ SJF ์ค์ผ์ค๋ง์ ์ฒ๋ฆฌํ๋ค. ๋ค์ CPU Burst Time์ ์์ธกํ๊ณ ์์ธก๋ CPU Burst ์๊ฐ ์ค ๊ฐ์ฅ ์งง์ ์๊ฐ์ ์ฒ๋ฆฌํ๋ค.
Next Cpu Burst Time ์์ธก ๋ฐฉ๋ฒ
๊ณผ๊ฑฐ์ CPU ์ฌ์ฉ๋์ ์๋ฉด ์ง์์ ํ๊ท ์ ๊ตฌํ ์ ์๋ค. ์ฆ, ์ด์ CPU Burst ์๊ฐ์ ๊ธธ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก, ์ต๊ทผ ์ ๋ณด์ ๊ณผ๊ฑฐ ์ ๋ณด๋ฅผ ๊ฐ์ค์น๋ก ๊ฒฐํฉํ์ฌ ์์ธก์ ์ํํ๋ Exponential Average๋ฅผ ์ด์ฉํ์ฌ CPU Burst Time ์์ธกํ๋ค.

์ค์ ํด๋น ์์์ ์ ์ฉํ์ ๋ ๊ทผ์ฌํ๋ ๊ฐ์ ๊ตฌํ์ ๋์ ์ค์ CPU Burst๋ฅผ ๋น๊ตํด์ ํ์ธํด๋ณด๋ฉด ๋ค์์ ๊ทธ๋ํ๋ฅผ ํ์ธํ ์ ์๋ค.

๊ฐ์ค์น๋ฅผ 1/2๋ก ํ์ ๋๋ก time 2๊น์ง์ ๊ณผ์ ์ ๋ค์๊ณผ ๊ฐ๋ค.
- ฯฮฑฯ _2 : 1/2 * 10 + 1/2 * 6 = 8 [ฯฮฑฯ _1 + t1] ๋ก ํ์ฌ(Time1)์ ๋ํ CPU Burst ์๊ฐ์ ๋ํ ์์ธก๊ฐ์ด๋ค.
- ฯฮฑฯ _3 : 1/2 * 8 + 1/2 * 4 = 6 [ฯฮฑฯ _2 + t2] ๋ก ํ์ฌ(Time2)์ ๋ํ CPU Burst ์๊ฐ์ ๋ํ ์์ธก๊ฐ์ด๋ค.
์ Exponential์ด๋
๊ฐ์ค์น์ ์ค์์ฑ
- ์ํ๊ฐ์ด 0์ธ ๊ฒฝ์ฐ : ฯฮฑฯ _n+1 = ฯฮฑฯ _n์ด ๋๋ค. ์ด๋ ์์ ํ ์์ธก๊ฐ๋ง์ ๊ฐ์ง๊ณ ์ฒ๋ฆฌํ๋ ๊ฒ์ ์๋ฏธํ๋ค.
- ์ํ๊ฐ์ด 1์ธ ๊ฒฝ์ฐ : ฯฮฑฯ _n+1 = tn์ด ๋๋ค. ์ด๋ ์์ ํ ์ต๊ทผ์ CPU Burst๋ง์ ๊ฐ์ง๊ณ ์ฒ๋ฆฌํ๋ ๊ฒ์ ์๋ฏธํ๋ค.
๊ธฐ๋ณธ์ ์ธ SJF๋ Non-Preemptiveํ SJF๋ก ์ด๋ฏธ ์งํ ์ค์ธ ํ๋ก์ธ์ค์ ์๋ฆฌ๋ฅผ ํ์น์ง ์๊ณ ์๋ฃ๋ ํ์ Ready Queue์ ์๋ ํ๋ก์ธ์ค๋ค ์ค์์ ๊ฐ์ฅ CPU Burst ์๊ฐ์ด ์ ์ ํ๋ก์ธ์ค๋ฅผ ์ฒ๋ฆฌํ๋ค.
๊ทธ๋ ๋ค๋ฉด ์์ ๋ก์ง์์ Preemptiveํ๊ฒ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ ๊น?
SRTF Scheduling
์๋ก์ด ํ๋ก์ธ์ค๊ฐ Ready Queue์ ๋ค์ด์ค๋ ์๊ฐ์ ์งํ์ค์ธ ํ๋ก์ธ์ค๊ฐ ์กด์ฌํ ์ ์๋ค. ํด๋น ๊ฒฝ์ฐ ์๋กญ๊ฒ ๋ค์ด์จ ํ๋ก์ธ์ค๊ฐ ์งํ์ค์ธ ํ๋ก์ธ์ค๋ณด๋ค ์คํ์๊ฐ์ด ์๋ค๋ฉด? ์ด๋ฐ ๊ฒฝ์ฐ์ ์ ์ ์ ํ ์ ์๋ค.
Shortest-Remaining-Time-First์ ์ฝ์์ด๋ฉฐ SJF์ ์ข ๋ฅ ์ค ํ๋๋ก ์ด๋ Preemptive SJF Scheduling์ด๋ผ๊ณ ํ๋ค. ์ฆ, ์งํ ์ค์ธ ํ๋ก์ธ์ค๋ฅผ ๋ฐ์ด๋ด๊ณ ๋ณธ์ธ์ด ์ฒ๋ฆฌํ๋ ๊ฒ์ด๋ค.
ํด๋น ์์๋ฅผ ๋ค์ด๋ณด๋ฉด ๋ค์์ ํ๋ก์ธ์ค ์ฒ๋ฆฌ๊ฐ ์กด์ฌํ๋ค.

์ ํ๋ก์ธ์ค๋ค์ SRTF๋ก ์ฒ๋ฆฌํ๋ฉด ๋ค์์ ์ฒ๋ฆฌ๊ณผ์ ์ ๊ฐ์ง๋ค.
- P1์ด 0์ด์ ๋์ฐฉํ์ฌ ์ฒ๋ฆฌ๋๋ค.
- 1์ด๊ฐ ๋์ด P1์ Burst Time์ 7์ด ๋๋ค. ์ด ๋, P2๊ฐ ๋์ฐฉํ๊ณ P1์ Remaining Burst Time(7)๊ณผ P2์ Burst Time(4)์ ๋น๊ตํ ๋ P2๊ฐ ๋ ์ ๊ฒ ๋จ์๊ธฐ์ P2๊ฐ CPU ์์์ ์ ์ ํ๊ณ P1๋ Ready Queue๋ก ๋ค์ด๊ฐ๋ค.
- 2์ด๊ฐ ๋์ด P2์ Burst Time์ 3์ด ๋๋ค. ์ด ๋, P3๊ฐ ๋์ฐฉํ๊ณ P2์ Remaining Burst Time(3)๊ณผ P3์ Burst Time(9)๋ฅผ ๋น๊ตํ ๋ P2๊ฐ ๋ ์ ๊ฒ ๋จ์๊ธฐ์ P2๊ฐ CPU ์์์ ์ ์ ํ๊ณ P3๋ Ready Queue๋ก ๋ค์ด๊ฐ๋ค.
- 3์ด๊ฐ ๋์ด P2์ Burst Time์ 2๊ฐ ๋๋ค. ์ด ๋, P4๊ฐ ๋์ฐฉํ๊ณ P2์ Remaining Burst Time(2)๊ณผ P4์ Burst Time(5)๋ฅผ ๋น๊ตํ ๋ P2๊ฐ ๋ ์ ๊ฒ ๋จ์๊ธฐ์ P2๊ฐ CPU ์์์ ์ ์ ํ๊ณ P4๋ Ready Queue๋ก ๋ค์ด๊ฐ๋ค.
- ์ดํ Ready Queue์ ๋จ์์๋ P1, P3, P4๋ฅผ Burst Time์ด ์์ ๊ฒ๋ค์ ์์ฐจ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ค.
Gantt chart ๋ก ํํํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.

waiting time
- Total Waiting Time : (10 - 1) + (1 - 1) + (17 - 2) + (5 - 3) =26
- Average Waiting Time : 26/4 = 6.5
์ ์ฒ๋ฆฌ๋ฅผ SJF Scheduling์ผ๋ก ํํํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.

waiting time
- Total Waiting Time 0 + (8 - 1) + (12 - 2) + (17 - 3)= 31
- Average Waiting Time : 31/4 = 7.75
SJF ์ค์ผ์ค๋ง๊ณผ STFJ๋ฅผ ๋น๊ต ํ์ ๋ SRTF๊ฐ SJF๋ณด๋ค Average Wiating Time์ด ๋ ์งง์ ๊ฒ์ ํ์ธํ ์ ์๋ค. ๊ฒฐ๊ตญ ์ ์ ์ ํ๋๋ ๋ง๋๋์์ ์ฑ๋ฅ์ด ๊ฐ๋ฆฐ ๊ฒ์ด๋ค.
RR Scheduling
Round-Robin Scheduling์ผ๋ก ์๊ฐ ๊ณต์ ์์คํ ์์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ CPU Scheduling์ด๋ค. ์ฌ๊ธฐ์์ Round-Robin์ Preemptive FCFS์ ๊ฐ๋ ์์ Time Quantum(Time slice)์ ๊ฐ๋ ์ ์ฒจ๊ฐํ ๊ฒ์ผ๋ก ๋ณด๋ฉด ๋๋ค. ์ฆ, preemptive FCFS๋ฅผ ํ๋ ์๋ถํ ํ์ฌ time๊ฐ๊ฒฉ๋ง๋ค ์ฒ๋ฆฌํ๋ ๊ฒ์ด๋ค.
์ฌ๊ธฐ์ ์ฃผ๋ก Time quantum์ ํ๋์ ์๊ฐ๋จ์๋ก 10~100ms๋ฅผ ์ฃผ๋ก ์ค์ ํ๋ค.
์ด๋ฌํ RR ์ค์ผ์ค๋ง์ ๊ตฌํํ๊ธฐ ์ํด์๋ Ready Queue ๋ Circular Queue๊ฐ ๋์ด์ผํ๋ค.

์ ์ฌ์ง์ฒ๋ผ ๊ณ์ํด์ ํ๋ก์ธ์ค๊ฐ ๋๊ฐ๊ณ ๋ค์ด๊ฐ๋ ๊ตฌ์กฐ๊ฐ ๋์ด์ผํใท.
์ฌ๊ธฐ์ Scheduler๋ Ready Queue๋ฅผ ์ํํ๋ฉด์ 1 time quantum๋ง๋ค CPU๋ฅผ ๊ฐ ํ๋ก์ธ์ค์ ํ ๋นํ๋ ๋ฐฉ์์ผ๋ก ์งํ๋๋ค.

์์ ํ๋ก์ธ์ค๋ฅผ RR Scheduling์ ํตํด ์คํํ๋ค๊ณ ๊ฐ์ ํ๊ณ Time Quantum์ 4๋ก ํ์ ๋ ๋ค์๊ณผ ๊ฐ์ด ์คํ๋๋ค๊ณ ๋ณผ ์ ์๋ค.
- P1์ด 4์ด ์คํ ํ Context Switch
- P2๊ฐ ์คํ๋๋ฉฐ ์๋ฃ
- P3๊ฐ ์คํ
- ์ดํ P1์ด ๊ณ์ Context Switch๋ฅผ ์ผ์ผํค๋ฉฐ ์ํ

Waiting time
- P1 = 10 - 4 = 6, P2 = 4, P3 = 7
- Total Waiting Time : 6 + 4 + 7 = 17
- Average Waiting Time : 17/3 = 5.66
Time Quantum ์ค์ ์ ์ค์์ฑ

RR Scheduling์ ๊ฒฝ์ฐ time quantum์ ํฌ๊ธฐ์ ๋ฐ๋ผ ์ฑ๋ฅ์ด ์ข์ฐ๋๋ค.
- Time Quantum์ 12๋ผ๊ณ ๊ฐ์ ํ์ ๋, Context Switch์ ์๋ 0์ด๋ค.
- Time Quantum์ 6์ด๋ผ๊ณ ๊ฐ์ ํ์ ๋, Context Switch์ ์๋ 1์ด๋ค.
- Time Quantum์ 1์ด๋ผ๊ณ ๊ฐ์ ํ์ ๋, Context Switch์ ์๋ 9์ด๋ค.
์ฆ, Time Quantum์ ์ค์ผ ์๋ก Context Switch๋ ์์ฃผ ์ผ์ด๋๋ค. ์ด๊ฒ์ด ๋ฌธ์ ๊ฐ ๋๋ ์ด์ ๋ dispatch latency์ ๋ฌธ์ ์ด๋ค. Dispatch Latency๊ฐ ์์ฃผ ๋ฐ์ํ ์๋ก CPU์ ์ฌ์ฉ๋ฅ ์ ์ก์๋จน๊ณ ๋จ์ ์๊ฐ๋น ์ฒ๋ฆฌํ ์ ์๋ ํ๋ก์ธ์ค์ ์๊ฐ ์ค์ด๋ค๊ธฐ ๋๋ฌธ์ด๋ค. ๋ฐ๋ฉด, Time Quantum์ ํฌ๊ฒํ ์๋ก FCFS์ ์ ์ฌํด์ ธ ์งง์ ์์ ์ด ์ค๋ซ๋์ ๋๊ธฐํ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๊ณ ์ค์๊ฐ์ฑ์ ๋ฐ์ํ์ง ๋ชปํ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
๊ทธ๋ ๊ธฐ์ ์ ์ ํ Time Quantum์ ์ค์ ํ๋ ๊ฒ์ด ์ค์ํ๋ค.
Priority-based Scheduling
์ฐ์ ์์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ ํ๋ก์ธ์ค์ ๊ณ ์ ํ ์ฐ์ ์์๋ฅผ ๋ถ์ฌํ๊ณ ๋์ ์ฐ์ ์์๋ฅผ ๊ฐ์ง ํ๋ก์ธ์ค๊ฐ ๋จผ์ CPU๋ฅผ ํ ๋น ๋ฐ๋ ๊ตฌ์กฐ์ด๋ค. ํด๋น ๊ณผ์ ์์ ์ฐ์ ์์๊ฐ ๋์ผํ๋ค๋ฉด FCFS๋ผ๊ณ ๋ด์ผํ๋ค.
์ ํ๋ก์ธ์ค๋ฅผ ๊ธฐ์ค์ผ๋ก ํ ๋, ๋ค์์ ๊ณผ์ ์ด ์งํ๋๋ค.
- ์ฐ์ ์์๊ฐ 1์ธ P2๊ฐ ์ฐ์ ์ ์ผ๋ก ์ฒ๋ฆฌ๋๋ค.
- ์ฐ์ ์์๊ฐ 2์ธ P5๊ฐ ์คํ๋๊ณ ์ดํ P1, P3, P4๊ฐ ์์ฐจ์ ์ผ๋ก ์คํ๋๋ค.
ํด๋นํ๋ Average Waiting Time์ 8.2์ด๋ค.
์ด๋ฌํ ์ฐ์ ์์ ์ค์ผ์ค๋ง์ ์ ์ ํ ๋๋ ๋น์ ์ ํ์ ํน์ง์ ๊ฐ์ง๋ค.
- ์ ์ ํ ํน์ง : ์คํ ์ค์ธ ํ๋ก์ธ์ค๋ณด๋ค ๋์ ์ฐ์ ์์๋ฅผ ๊ฐ์ง ํ๋ก์ธ์ค๊ฐ ๋์ฐฉ ์ CPU๋ฅผ ์ ์ ํ๋ค. ์ฆ, ์ค๊ฐ์ ๋ค์ด์ค๋ ํ๋ก์ธ์ค์ ๊ฒฝ์ฐ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ค.
- ๋น์ ์ ํ : ์คํ ์ค์ธ ํ๋ก์ธ์ค๊ฐ ์๋ฃ๋ ๋ ๊น์ง ๋ค๋ฅธ ํ๋ก์ธ์ค๋ ๋๊ธฐํ๋ค.
Starvation
๊ธฐ์ ์ํ๋ผ๊ณ ๋ถ๋ฆฌ๋ ์ด๊ฒ์ ์ฐ์ ์์ ์ค์ผ์ค๋ง์์์ ๋จ์ ์ผ๋ก ๊ผฝํ๋ฉฐ ์ด๋ ๋ฎ์ ์ฐ์ ์์๋ฅผ ๊ฐ์ง ํ๋ก์ธ์ค๊ฐ ๊ณ์ํด์ Ready Queue์ ๋ค์ด์ค๋ ๋์ ์ฐ์ ์์ ํ๋ก์ธ์ค๋ค์ ์ํด ๊ณ์ ๋๊ธฐ ์ํ์ ๋จธ๋ฌด๋ฅด๋ ๊ฒ์ ์๋ฏธํ๋ค. ์ฆ, ๋ฌดํ์ ๋๊ธฐ(indefinite blocking)์ ์ํฉ์ ์๋ฏธํ๋ค.
์ด๋ฌํ ๊ฒ์ ํด๊ฒฐํ๊ธฐ ์ํด์ Aging์ ๊ฐ๋ ์ ๋์ ํ๋ค. ๋์ด๋ฅผ ๋ถ์ฌํ๋ค๋ผ๋ ๋๋์ผ๋ก ์ค๋ ๋๊ธฐํ๋ ํ๋ก์ธ์ค์ ๊ฒฝ์ฐ ํ๋ก์ธ์ค์ ์ฐ์ ์์๋ฅผ ๋์ด๋ ๊ฒ์ด๋ค. ๊ทธ๋ฌ๋ ์ด๋ฐ ํด๊ฒฐ๋ฐฉ๋ฒ์ ์ฐ์ ์์๋ฅผ ๊ณ์ ์กฐ์ ํ๊ธฐ์ ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ๊ธฐ๋ ํ๋ค.
RR + Priority Scheduling
์ฐ์ ์์๊ฐ ๋์ผํ ๊ฒฝ์ฐ์๋ ๋ค์ํ ๋ฐฉ์์ผ๋ก ์ฐ์ ์์๋ฅผ ์กฐ์ ํ์ฌ ์ฒ๋ฆฌํ ์ ์์ง๋ง ์ด๋ฌํ ๊ฒฝ์ฐ ์ฃผ๋ก RR์ ์ ์ฉํ์ฌ ์ฒ๋ฆฌํ๋ค.

- ์ฐ์ ์์๊ฐ ์ ์ผ ๋์ P4๊ฐ ์คํ๋๋ค.
- P4๊ฐ ์ฒ๋ฆฌ๋ ํ ์ฐ์ ์์๊ฐ ๊ฐ์ P2, P3๋ RR ์ค์ผ์ค๋ง์ ํตํด time quantum๋ง๋ค ํ๋ก์ธ์ค๋ค์ด Context Switching์ ํ๋ฉฐ ์ฒ๋ฆฌ๋๋ค.
- P2๊ฐ ์๋ฃ๋ ํ P3๋ง ๋จ์๊ธฐ์ P3์ ์ฒ๋ฆฌ๋ฅผ ์๋ฃํ๋ค.
- P3๊ฐ ์ฒ๋ฆฌ๋ ํ ์ฐ์ ์์๊ฐ ๊ฐ์ P1, P5๋ RR ์ค์ผ์ค๋ง์ ํตํด time quantum๋ง๋ค ํ๋ก์ธ์ค๋ค์ด Context Switching์ ํ๋ฉฐ ์ฒ๋ฆฌ๋๋ค.
- P1์ด ์๋ฃ๋ ํ ๋จ์ P5๋ฅผ ์ฒ๋ฆฌํ๋ค.
์ ๊ณผ์ ์ ๋ค์์ Gantt Chart๋ก ์ฒ๋ฆฌํ ์ ์๋ค.

Multi-Level Queue Scheduling
ํ๋ก์ธ์ค๋ค์ ์ฌ๋ฌ ๊ฐ์ ํ๋ก ๋๋๊ณ ๊ฐ ํ์ ์๋ก ๋ค๋ฅธ ์ค์ผ์ค๋ง ์ ์ฑ
์ ์ ์ฉํ๋ ๊ฒ์ด๋ค.

ํด๋น ์ค์ผ์ค๋ง์ ํ๋ก์ธ์ค๋ค์ ํน์ง์ ๋ฐ๋ผ ํ๋ฅผ ๋ถ๋ฆฌํ์ฌ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๋ค. ์ค๋งํธํฐ์ ์์๋ก ๋ค์์ ๋, ์ ํ, ์นดํก, Network, Display ๋ฑ์ด ์ด๋ฃจ์ด์ง ๋ ์ด ๋ชจ๋ ํ๋ก์ธ์ค๋ค์ด ๋์ผ priority๋ฅผ ๊ฐ์ง์ง ์๊ธฐ์ ์์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ๋๋์ด ์ฒ๋ฆฌํ๋ค.
ํ๋ก์ธ์ค์ ๊ฒฝ์ฐ ํน์ฑ์ ๋ฐ๋ผ ์ฌ๋ฌ ํ๋ก ๋ถ๋ฆฌ๋๋๋ฐ ๊ฐ ํ๋ ๊ณ ์ ํ ์ค์ผ์ค๋ง ์ ์ฑ
์ ๊ฐ์ง๊ณ ํ ๊ฐ์ ์ฐ์ ์์๊ฐ ๊ฒฐ์ ๋๋ค.

- Real-time Processes : ์ต์์ ์ฐ์ ์์๋ฅผ ๊ฐ์ง๋ฉฐ, ์ฆ๊ฐ์ ์ธ ์ฒ๋ฆฌ๋ฅผ ์ํํ๋ค.
- System Processes : ์์คํ ์ด์์ ํ์ํ ์์ ์ผ๋ก ๋์ ์ฐ์ ์์๋ฅผ ๊ฐ์ง๋ค.
- Interactive Processes : ์ฌ์ฉ์์ ์ํธ์์ฉ์ด ํ์ํ ์์ ์ผ๋ก ์ค๊ฐ์ ์ฐ์ ์์๋ฅผ ๊ฐ์ง๋ค.
- Batch Processes : ๊ธด ์์ ์๊ฐ์ด ํ์ํ ์์ ์ผ๋ก ๊ฐ์ฅ ๋ฎ์ ์ฐ์ ์์๋ฅผ ๊ฐ์ง๋ค.
ํ๊ฐ์ ์ค์ผ์ค๋ง์ ๋ค์์ ๋ฐฉ์๋ค๋ก ์ฒ๋ฆฌ๋๋ค.
- Fixed-Priority Preemptive Scheduling : ์์์ ์ ์ํ ๊ฐ ํ์ ์ ๋์ ์ธ ์ฐ์ ์์๋ฅผ ํตํด ๋์ ์ฐ์ ์์ ํ๊ฐ ๋น์ด ์์ง ์์ผ๋ฉด ๋ฎ์ ์ฐ์ ์์ ํ์ ํ๋ก์ธ์ค๊ฐ ์คํ๋์ง ์๊ณ ์ฐ์ ์์๊ฐ ๋์ผ๋ฉด CPU๋ฅผ ์ ์ ํ๋ค. ๊ทธ ์๋ก Batch Queue์์์ ํ๋ก์ธ์ค๊ฐ ์คํ ์ค์ธ ๊ฒฝ์ฐ Interactive Queue์ ์๋ก์ด ํ๋ก์ธ์ค๊ฐ ๋์ฐฉํ๋ฉด Interactive ํ๋ก์ธ์ค๊ฐ ์ฐ์ ์คํ๋๋ค.
- Time-Slice : CPU ์๊ฐ์ ํ ๊ฐ์ ๋ถํ ํ์ฌ ํ ๋นํ๋ค. ์๋ฅผ ๋ค์ด, Interactive Queue์ ๊ฒฝ์ฐ ์ ์ฒด CPU ์๊ฐ์ 80%๋ฅผ ๋ฐ๊ณ RR ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ค. ๋ฐฐ์น ์ฒ๋ฆฌ์ ๊ฒฝ์ฐ 20%๋ฅผ ๋ฐ๊ณ FCFS ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ค.
Multi-Level Feedback Queue
Multi-Level Queue Scheduling์ ํ์ฅ ๋ฒ์ ์ผ๋ก ํ๋ก์ธ์ค๊ฐ ์คํ ์ค์ ํ ๊ฐ ์ด๋์ด ๊ฐ๋ฅํ๋๋ก ์ค๊ณ๋์๋ค. ์ด๋ CPU Burst Time, I/O ์์ฒญ์ ์ฌ๋ถ์ ๊ฐ์ ๋์ ์ธ ํน์ฑ์ ๋ฐ๋ผ ํ๋ก์ธ์ค์ ์์น(ํ)๋ฅผ ๋ณ๊ฒฝํ์ฌ ์ฑ๋ฅ์ ์ต์ ํํ๋ค.

์์ ๊ฐ์ ๊ฒฝ์ฐ ์ฃผ๋ก CPU Burst Time์ด ์งง์ ๊ฒ๋ค์ ์ฃผ๋ก ์์ ํ์ CPU Burst Time์ด ๊ธด ๊ฒฝ์ฐ ์ฒ๋ฆฌ๋์ ๊ทน๋ํ๋ฅผ ์ํด ํ์ ํ์ ๋ฃ์ด ์ฒ๋ฆฌํ๋ค.
๋์ ์๋ฆฌ
- ์ด๊ธฐ ์ํ : ๋ชจ๋ ํ๋ก์ธ์ค๋ ๊ฐ์ฅ ๋์ ์ฐ์ ์์ ํ์์ ์์ํ๋ค.
- ํ ์ด๋ ์กฐ๊ฑด : CPU Burst Time์ด ๊ธธ์ด ์์์ ๋ ์ ํ๋ ๊ฒฝ์ฐ ์ข ๋ ๋ฎ์ ์ฐ์ ์์ ํ๋ก ์ด๋ํ๋ค. ๋ฐ๋๋ก ์ค๋ซ๋์ ๋๊ธฐ ์ํ์ ์๋ ๊ฒฝ์ฐ ๋์ ์ฐ์ ์์ ํ๋ก ์ด๋ํ๋ค.
- ํ ๊ฐ ์ค์ผ์ค๋ง : ๋์ ์ฐ์ ์์ ํ๊ฐ ๋น์ด ์์ง ์์ผ๋ฉด ๋ฎ์ ์ฐ์ ์์ ํ์ ํ๋ก์ธ์ค๊ฐ ์คํ๋์ง ์๋๋ค.
์ฃผ์ ๋งค๊ฐ ๋ณ์
- ํ์ ๊ฐ์
- ๊ฐ ํ์ ์ค์ผ์ค๋ง ์๊ณ ๋ฆฌ์ฆ
- ํ๋ก์ธ์ค์ ์ ๊ทธ๋ ์ด๋ ์กฐ๊ฑด
- ํ๋ก์ธ์ค ๊ฐ๋ฑ ์กฐ๊ฑด
- ํ ์ง์ ์กฐ๊ฑด
์์ ๊ณผ์ ์ ํ๋์์๋ ๋ง์ด ์ฌ์ฉ๋๋ฉฐ ์์์ ๋์จ Starvation์ ๋ฐฉ์ง, ํจ์จ์ ์์๊ด๋ฆฌ, ๋ค์ํ ํ๊ฒฝ์์์ ์ ์ฉ์ด ๊ฐ๋ฅํ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ์ง๋ง ๊ตฌํ์ ๋ณต์ก์ฑ, ์ค๋ฒํค๋์ ๋ฐ์์ด ๋ฌธ์ ๊ฐ ๋๋ค.
5.4 Thread Scheduling
ํ๋์์๋ ๋ฉํฐ์ค๋ ๋ ํ๊ฒฝ์ด๋ผ Thread Scheduling์ ์ฃผ๋ก ํ๋ฉฐ ์ด๋ Kernel Threads๋ค์ ์ฒ๋ฆฌํ๋ค. ์ด๋ฌํ ์ํฉ์์ ์ด์์ฒด์ ๋ ๋ค์ ๋ ๊ฐ์ง๋ฅผ ๊ด๋ฆฌํ๋ค๊ณ ๋ณด๋ฉด ๋๋ค.
- ํ๋ก์ธ์ค ๊ฐ ์ค์ผ์ค๋ง : ์ฌ๋ฌ ํ๋ก์ธ์ค ๊ฐ์ CPU๋ฅผ ํ ๋นํ๋ ์์
- ์ค๋ ๋ ๊ฐ ์ค์ผ์ค๋ง : ํ๋์ ํ๋ก์ธ์ค ๋ด์์ ์คํ๋๋ ์ฌ๋ฌ ์ค๋ ๋ ๊ฐ์ CPU ๋ถ๋ฐฐ
Kernel-Level Threads vs User-Leve Threads
- Kernel-Level Threads : ํ๋ก์ธ์ค์ ๊ฐ๋ ์ด ์๋๋ฉฐ ์ด์์ฒด์ ์ ์ํด ์ง์ ๊ด๋ฆฌ๋๋ฉฐ ๊ฐ ์ค๋ ๋๋ ์ปค๋์ ์ํด
- User-Level Threads : ์ด์์ฒด์ ์ ๊ด๋ฆฌ๊ฐ ์๋๊ธฐ์ ์ปค๋์ ์ธ์งํ์ง ๋ชปํ๋ฉฐ ์ฌ์ฉ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๊ด๋ฆฌํ์ฌ ํ๋ก์ธ์ค ๋ด๋ถ์์๋ง ๋์ํ๋ค.
๊ฒฐ๊ตญ OS๋ CPU Scheduling์ Kernel-Level Threads๋ง์ ๊ฐ์ง๊ณ ์ํํ๋ค๊ณ ๋ณด๋ฉด ๋๋ค.
5.5 Multiple Processor Scheduling
๋ฉํฐํ๋ก์ธ์ ํ๊ฒฝ์์ CPU์์์ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ์ํ ์ค์ผ์ค๋ง ๋ฐฉ์์ด๋ค. ๋ฉํฐ ํ๋ก์ธ์์์์ ์ํคํ ์ฒ๋ 4๊ฐ์ง๊ฐ ์กด์ฌํ๋ค.
- Multi-Core CPU
- Multi-Threaded Cores (ํ๋์ ์ฝ์ด์์ ์ฌ๋ฌ ๊ฐ์ ์ค๋ ๋๋ฅผ ๋์ ์คํ ๊ฐ๋ฅํ ์์คํ )
- NUMA (Non-Uniform Memory Access) systems
- Heterogeneous Multi-Processing
Simultaneous Multithreading (SMT)
ํ๋์ ๋ฌผ๋ฆฌ์ ์ฝ์ด์์ ์ฌ๋ฌ ์ค๋ ๋๋ฅผ ๋์์ ์คํํ ์ ์๋๋ก ์ค๊ณ๋ ๊ธฐ์ ๋ก, ๋ฉํฐ์ฝ์ด ํ๋ก์ธ์์ ๋ณ๋ ฌ์ฑ์ ๊ฐํ์ํจ๋ค.

- Common Ready Queue : ๋ชจ๋ ์ฝ์ด๊ฐ ๊ณต์ ํ๋ ํ๋์ Ready Queue๋ง ์กด์ฌํ๋ค.
- Per-Core Run Queues : ๊ฐ ์ฝ์ด๊ฐ ๋ ๋ฆฝ์ ์ผ๋ก ๊ด๋ฆฌํ๋ Ready Queue๊ฐ ์กด์ฌํ๋ค.
Multi-Threaded Multi-Core System
๋ฉํฐ์ฝ์ด ํ๋ก์ธ์์ ๋ฉํฐ ์ค๋ ๋ ๊ธฐ์ ์ ๊ฒฐํฉํด ์ฑ๋ฅ์ ๊ทน๋ํํ๋ ์์คํ ์ผ๋ก ๋ค์์ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๋ค.
- Multi Processors : ํ๋์ ๋ฌผ๋ฆฌ์ ์นฉ์ ์ฌ๋ฌ ๊ฐ์ ๋ ๋ฆฝ์ ์ธ CPU์ฝ์ด๋ฅผ ํฌํจํ์ฌ ๋ณ๋ ฌ์ฒ๋ฆฌ๋ฅผ ์ง์ํ๋ค. ๊ฐ ์ฝ์ด๋ ์์ฒด์ ์ผ๋ก ๋ช ๋ น์ ์คํํ๊ณ , ์บ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ณต์ ํ๋ค.
- Simultaneous MultiThreading : ํ๋์ ๋ฌผ๋ฆฌ์ ์ฝ์ด์์ ์ฌ๋ฌ ์ค๋ ๋๋ฅผ ๋์์ ์คํํ ์ ์๋๋ก ์ค๊ณ๋ ๊ธฐ์ ๋ก CPU ์์์ ์ ํด ์๊ฐ์ ์ค์ด๊ณ ๋ณ๋ ฌ์ฑ์ ์ฆ๊ฐ์ํจ๋ค.
ํด๋นํ๋ ์์คํ ์ ์ค์ผ์ค๋ง์ ๋ค์์ ์ฒ๋ฆฌ ๋ฐฉ์์ ๋ฐ๋ฅธ๋ค.
- Load Balancing: ๋ชจ๋ ์ฝ์ด๊ฐ ๊ท ๋ฑํ๊ฒ ์ฒ๋ฆฌํ๋๋ก ๊ด๋ฆฌํ๋ค.
- Processor Affinity : ํ๋ก์ธ์ ์นํ์ฑ์ด๋ผ๊ณ ๋ถ๋ฆฌ๋ฉด ํน์ ์ค๋ ๋๊ฐ ๋์ผํ ์ฝ์ด์์ ์คํ๋๋๋ก ์ค์ ํ์ฌ ์บ์ ํ์ฉ๋๋ฅผ ๋์ธ๋ค. ์ด๊ฒ์ ๊ฐ์ ์ฑ์ ์ ๋์ ๋ฐ๋ผ Soft, Hard๋ก ๋๋๋ค.
- Push/Pull Migration : Push Migration์ ๊ฒฝ์ฐ ๊ณผ๋ถํ๊ฐ ๋ฐ์ํ CPU์์ ๋ค๋ฅธ CPU๋ก ๊ฐ์ ๋ก ์ด๋์ํค๊ณ Pull Migration์ ์ ํด ์ํ์ CPU๊ฐ ๋ค๋ฅธ CPU์์ ์์
์ ๊ฐ์ ธ์ค๋ ๊ฒ์ด๋ค.

5.6 Real-Time CPU Scheduling
์ค์๊ฐ ์์คํ ์์์ CPU Scheduling์ผ๋ก ํด๋น ์์คํ ์ ์๊ฐ์ ๋ํ ์๊ฒฉํ ์ค์๊ฐ ํ์์ ์ด๋ฉฐ, ํน์ ์์ ์ด ์ ํด์ง ์๊ฐ ๋ด์ ์๋ฃ๋์ง ์์ผ๋ฉด ์์คํ ์ ์ ๋ขฐ์ฑ๊ณผ ์์ ์ฑ์ด ์์๋ ์ ์๋ค. ๊ทธ๋ฌ๋ ์ด๋ฌํ ์์ ์๋ ๋ค์ ์ ํ์ผ๋ก ๋๋์ด์ Trade-off๋ฅผ ์ทจํด๊ฐ๋ค.
- Soft Real-Time Tasks : ์๊ฐ ์ ์ฝ์ ์ค์ํ์ง ๋ชปํด๋ ์์คํ ์ ์ฒด์ ํฐ ์ํฅ์ ๋ผ์น์ง ์๋ ๊ฒ์ผ๋ก ์ฆ, ๋ฐ๋์ ํด๋น ์๊ฐ๋ด์ ์ฒ๋ฆฌ๋ฅผ ํ๋ ๊ฒ์ด ์๋ ๊ฒ์ด๋ค. ์๋ฅผ ๋ค์ด, ์ ํ๊ธฐ, ์์ฑ RF ์ ํธ์ ์ฌ์ด๋ ๋ณํ์ ๊ฒฝ์ฐ ์ค๊ฐ์ค๊ฐ ๋๊ธฐ๋ ๊ฒฝ์ฐ๊ฐ ์๋๋ฐ ์ด๋ฌํ ๊ฒฝ์ฐ๊ฐ ํด๋นํ๋ค.
- Hard Real-Time Tasks : ๋ฐ๋์ ์๊ฐ ์ ์ฝ์ ์ค์ํด์ผํ๋ ์์ ์ผ๋ก ์คํจ ์์ ์ฌ๊ฐํ ๊ฒฐ๊ณผ๋ฅผ ์ด๋ํ๋ค. ๊ทธ ์์๋ก ํญ๊ณต๊ธฐ ์ ์ด ์์คํ ์ ๊ฒฝ์ฐ ์๊ฐ์ ์ค์ํ์ง ๋ชปํ๋ฉด ์ถ๋ฝ์ฌ๊ณ ๊ฐ ์ผ์ด๋ ์๋ ์๋ค.
Rate-Monotonic Scheduling
์ฃผ๊ธฐ์ ์ธ ์์
์ ๋ํด ๊ณ ์ ๋ ์ฐ์ ์์๋ฅผ ๋ถ์ฌํ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค. ์ฌ๊ธฐ์ ์์
์ ์ฃผ๊ธฐ๊ฐ ์งง์์๋ก ๋์ ์ฐ์ ์์๋ฅผ ๊ฐ์ง๊ฒ ๋๋ค. ๋๋ CPU์ ํ์ฉ๋๋ 69.3์ผ๋ก ์ ํ๋๋ค. ๊ตฌํ์ด ๊ฐ๋จํ๋ฉฐ ์์ธก์ด ๊ฐ๋ฅํ๊ณ ์ฃผ๊ธฐ์ ์์
์ ์ ํฉํ์ง๋ง CPU์ ํ์ฉ๋ ์ ํ๊ณผ ์ฃผ๊ธฐ๊ฐ ๊ธด ์์
๋ค์ ์ฅ์๊ฐ ๋๊ธฐํ๋ ๊ธฐ์์ํ์ ๋น ์ง๊ฒ ๋๋ค.

Earlist Deadline First
Deadline์ ๋์ด ์ด๋ฅผ ๊ธฐ์ค์ผ๋ก ์ฐ์ ์์๋ฅผ ๋ถ์ฌํ๋ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก deadline์ด ์๋ฐํ ์์
์ด ๊ฐ์ฅ ๋์ ์ฐ์ ์์๋ฅผ ๊ฐ์ง๋ค. ํด๋น ์๊ณ ๋ฆฌ์ฆ์ CPU ํ์ฉ๋๊ฐ 100%๊น์ง ์ฌ์ฉ๊ฐ๋ฅํ๋ฉฐ ๋น์ฃผ๊ธฐ์ ์์
์๋ ์ฒ๋ฆฌ๋ฅผ ํ ์ ์๋ค. ๋ค๋ง Deadline ๋ฐ ์ค๋ฒํค๋ ๊ด๋ฆฌ์ ๋ํ ๋น์ฉ์ด ๋ง์ด ๋ ๋ค.
